﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace BLL
{
	public class QLKQBaoTriTB
	{
		/// <summary>
		/// Lấy tất cả kết quả bảo trì thiết bị
		/// </summary>
		public static IEnumerable<KQBaoTriTB> GetAll()
		{
			return Generic.GetAll<KQBaoTriTB>();
		}

		/// <summary>
		/// Thêm kết quả bảo trì thiết bị
		/// </summary>
		public static ActionResult Insert(KQBaoTriTB kq)
		{
			ActionResult ac = new ActionResult("Thêm kết quả bảo trì");
			if (kq.MaNguoiGui =="")
			{
				ac.Exceptions.Add(new Exception("Chưa nhập mã người gửi hoặc mã sai"));
			}
			if (kq.MaTB=="")
			{
				ac.Exceptions.Add(new Exception("Chưa nhập mã thiết bị hoặc mã sai"));
			}
			try
			{
				if (!Generic.Insert<KQBaoTriTB>(kq))
				{
					ac.Exceptions.Add(new Exception("Lỗi"));
				}
			}
			catch (Exception ex)
			{
				ac.Exceptions.Add(ex);
			}
			return ac;
		}

		/// <summary>
		/// Xóa kết quả bảo trì thiết bị
		/// </summary>
		public static int Delete(KQBaoTriTB kq)
		{
			return Generic.DeleteByCondition<KQBaoTriTB>(kq1 => kq1.MaThongBao == kq.MaThongBao);
		}

		/// <summary>
		/// Xóa kết quả bảo trì thiết bị theo thuộc tính
		/// </summary>
		public static bool DeleteByID(int matb)
		{
			return Generic.DeleteByCondition<KQBaoTriTB>(x => x.MaThongBao == matb)>0;
		}

		/// <summary>
		/// Xóa tất cả kết quả bảo trì thiết bị
		/// </summary>
		public static int DeleteAll(IEnumerable<KQBaoTriTB> ps)
		{
			return Generic.DeleteByCondition<KQBaoTriTB>(kq => ps.Where(x => x.MaThongBao == kq.MaThongBao).Count() == 1);
		}

		/// <summary>
		/// Cập nhật kết quả bảo trì thiết bị
		/// </summary>
		public static int Update(KQBaoTriTB kq)
		{
			return Generic.EditByCondition<KQBaoTriTB>(k => k.MaThongBao == kq.MaThongBao, k =>
			{
				k.MaThongBao = kq.MaThongBao;
				k.MaTB = kq.MaTB;
				k.MaNguoiGui = kq.MaNguoiGui;
				k.TinhTrangLoi = kq.TinhTrangLoi;
				k.NgayBaoTri = kq.NgayBaoTri;
				k.KetQua = kq.KetQua;
			});
		}

		/// <summary>
		/// Tìm theo điều kiện
		/// </summary>
		public static IEnumerable<KQBaoTriTB> FindByCondition(Func<KQBaoTriTB, bool> func)
		{
			return Generic.FindByCondition<KQBaoTriTB>(func);
		}

		/// <summary>
		/// Tìm theo thuộc tính
		/// </summary>
		public static KQBaoTriTB FindByID(int matb)
		{
			return Generic.FindByCondition<KQBaoTriTB>(x=>x.MaThongBao==matb).ToList()[0];
		}

		public enum DKTimKiem
		{
			MaThongBao = 0,
			MaNG,
			MaTB,
			TinhTrangLoi,
			NgayBaoTri,
			KetQua,
		};

		public static void TimKiem(DKTimKiem dk, DataGridView drv, string dktk)
		{
			try
			{
				switch (dk)
				{
					case DKTimKiem.MaThongBao:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.MaThongBao.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.MaNG:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.MaNguoiGui.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.MaTB:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.MaTB.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.TinhTrangLoi:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.TinhTrangLoi.ToString().ToLower(), dktk.ToLower()));
						break;
					case DKTimKiem.NgayBaoTri:
						drv.DataSource = FindByCondition(x => x.NgayBaoTri != null && Regex.IsMatch(x.NgayBaoTri.Value.ToShortDateString(), dktk));
						break;
					case DKTimKiem.KetQua:
						drv.DataSource = FindByCondition(x => Regex.IsMatch(x.KetQua.ToString().ToLower(), dktk.ToLower()));
						break;
					default:
						break;
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}
	}
}
